package com.mql.onlinechatsystem.system.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.mql.onlinechatsystem.system.entity.SysTag;
import com.mql.onlinechatsystem.system.mapper.SysTagMapper;
import com.mql.onlinechatsystem.system.service.ISysTagService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.mql.onlinechatsystem.system.vo.SysTagVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 *  服务实现类
 * </p>
 *
 * @author 马庆林
 * @since 2023-03-09
 */
@Service
public class SysTagServiceImpl extends ServiceImpl<SysTagMapper, SysTag> implements ISysTagService {
    @Override
    public List<SysTagVo> getTagList() {
        List<SysTag> tagList = baseMapper.selectList(new QueryWrapper<SysTag>().isNull("fatherid"));
        List<SysTagVo> tagVoList = tagList.stream().map(item -> {
            SysTagVo sysTagVo = new SysTagVo();
            BeanUtils.copyProperties(item, sysTagVo);
            return sysTagVo;
        }).collect(Collectors.toList());
        List<SysTagVo> collect = tagVoList.stream().map(item -> {
            item.setChildList(setChild(item));
            return item;
        }).collect(Collectors.toList());
        return collect;
    }
    private List<SysTagVo> setChild(SysTagVo sysTagVo){
        String selfid = sysTagVo.getSelfid();
        List<SysTag> sysTagList = baseMapper.selectList(new QueryWrapper<SysTag>().eq("fatherid", selfid));
        if (sysTagList.size()==0){
            return null;
        }
        List<SysTagVo> sysTagVoList = sysTagList.stream().map(item -> {
            SysTagVo sysTagVo1 = new SysTagVo();
            BeanUtils.copyProperties(item, sysTagVo1);
            return sysTagVo1;
        }).collect(Collectors.toList());
        List<SysTagVo> collect = sysTagVoList.stream().map(item -> {
            item.setChildList(setChild(item));
            return item;
        }).collect(Collectors.toList());
        return collect;
    }
}
